package mh.modules.mh.service.impl;

import mh.common.utils.R;
import mh.modules.mh.dao.GrowthDao;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import mh.common.utils.PageUtils;
import mh.common.utils.Query;

import mh.modules.mh.dao.BcDao;
import mh.modules.mh.entity.BcEntity;
import mh.modules.mh.service.BcService;


@Service("bcService")
public class BcServiceImpl extends ServiceImpl<BcDao, BcEntity> implements BcService {
    @Autowired
    private BcService bcService;
    @Autowired BcDao bcDao;
    @Autowired
    private GrowthDao growthDao;

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<BcEntity> page = this.page(
                new Query<BcEntity>().getPage(params),
                new QueryWrapper<BcEntity>().like(StringUtils.isNotBlank((String) params.get("key")),"mh_bh",params.get("key"))
        );

        return new PageUtils(page);
    }

    @Override
    public BcEntity getByBh(String mhBh) {
        BcEntity bc = bcDao.selectByBh(mhBh);
        System.out.println("BC的信息为"+bc);
        return bc;
    }

    /**
     * 1.通过编号判断是否存在
     * 2.计算  统计螨害株率（螨害株率 =（螨害株数 ÷ 总株数）×100%。）   ||平均螨害级数（螨害株树的级别相加/螨害株树取整） ||
     * 有螨株率（有螨株率 =（有螨的株数 ÷ 总株数）×100%。）  || 百株卵数（卵数*100）  || 总虫量(卵数+幼虫数+铃虫)  || 有虫株率（幼虫数/总数量）
     * 如果存在更新，不存在保存
     * @param bc
     * @returnBcEntityBcEntity(bcId=null, mhBh=mh1729845761065, mhNumber=null, bcMhzs=null, bcBzml=10,
     * bcYjmhys=10, bcEjmhys=10, bcTjmhzl=null, bcMhjb=10, bcPjmhjs=null, bcYmzl=null, bcLs=10,
     * bcYcs=10, bcLq=10, bcBzls=null, bcBzlcl=10, bcZcl=null, bcYczl=null, bcYyzl=10.0, bcBzyl=10.0)
     */
    @Override
    public boolean saveOrUpdateBc(BcEntity bc) {
        //螨害株数  全部数据更新级数 ToDO
        Long bcMhzs = bcDao.getBctotol();
        bc.setBcMhzs(bcMhzs);  //1


        Long mhNumber = growthDao.getTotal();
        //有螨株率 全部数据更新级数 ToDO
        Double BcYmzl=(((double)bcMhzs/mhNumber))*100;
        //System.out.println("有螨株率"+BcYmzl+"  " +" bcMhzs" +bcMhzs+"mhNumber  "+mhNumber);

        bc.setBcYmzl(BcYmzl); //2

        bc.setMhNumber(mhNumber); //3
        // '统计螨害株率  全部数据更新级数 ToDO
        bc.setBcTjmhzl(BcYmzl);//4
        //平均螨害级数 全部数据更新级数 ToDO
        List<BcEntity> list = bcService.list(null);
        int sum=0;
        for(BcEntity bcEntity : list){
            sum+=bcEntity.getBcMhjb();
        }
        int bcPjmhjs = sum/list.size();
        bc.setBcPjmhjs(bcPjmhjs);//5
        //总虫量
        long l = bc.getBcLs() + bc.getBcYcs() + bc.getBcBzlcl();
        bc.setBcZcl(l); //6
        //有虫株率幼虫数/总数量
        bc.setBcYczl((((double)bc.getBcYcs()/l))*100);//7
        //百株卵数 独立数据
        bc.setBcBzls(bc.getBcLs()*100); //8
        //更新3条总体数据 有螨株率  '统计螨害株率  平均螨害级数
        boolean update = bcDao.updateAllBc(bcMhzs,BcYmzl,BcYmzl,bcPjmhjs);
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("mh_bh",bc.getMhBh());
        BcEntity one = bcService.getOne(queryWrapper);
        if(one == null){//不存在
            //更新总数
            bcService.save(bc);
            //如果新加BC需要更新螨害株数
            bcDao.updateAllMhmhzs(bcMhzs+1);
            return update;
        }
        bc.setBcId(one.getBcId());
//        System.out.println("序号"+bc.getBcId());
        bcService.updateById(bc);
        return  update;
    }

    @Override
    public R zhanshi() {
        //螨害株数
        Long bcMhzs = bcDao.getBctotol();
        //总株数
        Long mhNumber = growthDao.getTotal();
        List<BcEntity> list = bcService.list(null);
        Double bcYmzl = list.get(0).getBcYmzl();
        R r = new R();
        r.put("bcMhzs",bcMhzs);
        r.put("mhNumber",mhNumber);
        r.put("bcYmzl",bcYmzl);
        return R.ok(r);
    }

    /**
     *    SELECT bc_ls, bc_ycs, bc_zcl FROM mh_bc;找出幼虫和卵虫与总虫量的关系
     *    散点图
     * @return
     */
    @Override
    public R bcNum() {
        List<BcEntity> bcEntities = bcDao.getBcNum();
        return R.ok().put("data",bcEntities);
    }

}